home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio / Ham Radio CD-ROM (Emerald Software) (1995).ISO / misc / roc / roc.bas (.txt) next >
Encoding:
GW-BASIC  |  1986-04-20  |  2.3 KB  |  79 lines

  1. 10  SCREEN 0:CLS:WIDTH 80:PRINT"Reciever Operating Characteristic Curve Generator":PRINT
  2. 20  DIM Y(300,4),X(300,20)
  3. 30  DEF FNY(Y)=159-(Y-YL)*159/(YH-YL)
  4. 40  DEF FNX(X)=32+(X-XL)*287/(XH-XL)
  5. 50  PRINT:PRINT
  6. 60  LE=32:X0=32:Y0=159:XL=0:YL=0:YH=1:XH=1
  7. 70  Y$="p  post test":X$="p  pre test"
  8. 80  INPUT "Sensitivity: ",SENS:IF SENS>=1 THEN SENS=SENS/100
  9. 90  INPUT "Specificity: ",SPEC:IF SPEC>=1 THEN SPEC=SPEC/100
  10. 95  PRINT:PRINT"Display full range of pre-test probabilities? ";:Z$=INPUT$(1):BEEP:PRINTZ$:Z=Z$="n" OR Z$="N"
  11. 97  IF Z THEN PRINT"Maximum p to be displayed: a) .1" ELSE 100
  12. 98  PRINT"                           b) .01"
  13. 99  Z$=INPUT$(1):BEEP:IF Z$="a" OR Z$="A" THEN XH=0.1 ELSE XH=0.01
  14. 100  PRINT:PRINT"Computing predictive values..."
  15. 110  FOR I=0 TO 300
  16. 120  P=XH*I/300:X(I,0)=P
  17. 130  A=SENS*P:C=P-A:D=SPEC*(1-P):B=1-A-C-D
  18. 140  Y(I,0)=A/(A+B):Y(I,2)=C/(D+C)
  19. 150  NEXT I
  20. 160  REM *********** ADJUST VALUES ************
  21. 170  PRINT"Scaling graph..."
  22. 180  FOR I=1 TO 300
  23. 190  FOR M=0 TO 2 STEP 2
  24. 200  Y=Y(I,M):Y(I,M+1)=INT(FNY(Y)+0.5)
  25. 210  NEXT M
  26. 220  X=X(I,0):X(I,1)=INT(FNX(X)+0.5)
  27. 230  NEXT I
  28. 240  REM ********** PLOT BARS ****************
  29. 250  SCREEN 1: CLS
  30. 260  LINE (32,Y0)-(320,Y0)
  31. 270  LINE (X0,0)-(X0,159)
  32. 280  FOR I=2 TO 300
  33. 290  FOR M=1 TO 3 STEP 2:LINE (X(I-1,1),Y(I-1,M))-(X(I,1),Y(I,M)):NEXT M
  34. 300  NEXT I
  35. 310  REM ****** LINEAR Y AXIS ********
  36. 320  FOR I=1 TO 0 STEP -0.1
  37. 330  Y=I: LINE (X0+4,FNY(Y))-(X0,FNY(Y)):LOCATE INT(((FNY(Y))*20/159)+1.5),INT (X0/8-1.9)
  38. 340  IF Y=1 THEN PRINT "1.0":GOTO 360
  39. 350  PRINT USING " .#";Y
  40. 360  NEXT I
  41. 370  FOR I=1 TO 0 STEP -0.05
  42. 380  IF I<=YH THEN Y=I: LINE (X0+2,FNY(Y))-(X0,FNY(Y))
  43. 390  NEXT I
  44. 400  FOR I=1 TO LEN (Y$)
  45. 410  LOCATE 11-INT(LEN (Y$)/2)+I,1
  46. 420  PRINT MID$(Y$,I,1)
  47. 430  NEXT I
  48. 440  REM ****** LINEAR X AXIS ********
  49. 441  DC=XH/10
  50. 450  FOR I=XH TO 0 STEP -DC
  51. 460  X=I:LINE (FNX(X),Y0-4)-(FNX(X),Y0):LOCATE INT(Y0/8)+2,INT(FNX(X)*0.12-0.7)
  52. 470  IF X=1 THEN PRINT "  1";:GOTO 490
  53. 475  IF X>=0.095 THEN PRINT USING "  .#";X:GOTO 490
  54. 480  IF X>=0.01 THEN PRINT USING " .##";X
  55. 490  NEXT I
  56. 495  STP=DC/5
  57. 500  FOR I=XH TO 0 STEP -STP
  58. 510  X=I:LINE (FNX(X),Y0-2)-(FNX(X),Y0)
  59. 520  NEXT I
  60. 530  FOR I=1 TO LEN (X$)
  61. 540  LOCATE 22,21-INT(LEN (X$)/2)+I
  62. 550  PRINT MID$ (X$,I,1)
  63. 560  NEXT I
  64. 580  LOCATE 1,6:PRINT"+"
  65. 590  LOCATE 19,39:PRINT"-"
  66. 600  FOR I=1 TO 5000:NEXT I
  67. 610  LOCATE 21,4
  68. 620  LINE INPUT "";Z$
  69. 630  SCREEN 0:WIDTH 80
  70. 635  LOCATE 8,14:PRINT"Sensitivity=";SENS;"               Specificity=";SPEC
  71. 640  LOCATE 10,12:PRINT"pre-test probability          - test            + test"
  72. 650  PRINT"           --------------------          ------            ------"
  73. 655  PRINT
  74. 660  INPUT;"              ";P:IF P>=1 THEN P=P/100
  75. 665  IF P=0 THEN RUN "menu.bas"
  76. 670  A=SENS*P:C=P-A:D=SPEC*(1-P):B=1-A-C-D
  77. 680  PRINT TAB(41);:PRINT USING ".#######           .######";1-D/(D+C),A/(A+B)
  78. 690  GOTO 660
  79.